#ifndef __SIGEL_MATH_LIB_VEC4_H__
#define __SIGEL_MATH_LIB_VEC4_H__

__declspec(align(16)) class vec4
{
public:
	float x,y,z,w;

	vec4();
	vec4(float x,float y,float z,float w);
	vec4(float value);
	vec4(const vec4 &copy);
	vec4(const vec3& vec, float w);

	vec4& operator =(const vec4 &other);

	bool operator == (const vec4 &other) const;
	bool operator != (const vec4 &other) const;

	vec4 operator +() const;
	vec4 operator -() const;

	vec4 operator +(const vec4 &other) const;
	vec4 operator +(float value) const;
	vec4 operator *(const vec4 &other) const;
	vec4 operator *(float value) const;


	vec4& operator +=(const vec4 &other);
	vec4& operator +=(float value);
	vec4& operator *=(const vec4 &other);
	vec4& operator *=(float value);


	vec4 operator -(const vec4 &other) const;
	vec4 operator -(float value) const;
	vec4 operator /(const vec4 &other) const;
	vec4 operator /(float value) const;


	vec4& operator -=(const vec4 &other);
	vec4& operator -=(float value);
	vec4& operator /=(const vec4 &other);
	vec4& operator /=(float value);

	operator float*();
	operator const float*() const;

	float operator [] (int index);

	vec4 lerp(const vec4 &other, float scalar) const;
	void lerpme(const vec4 &other, float scalar);

	float len();
	void normalize();
	void normize();
};

#endif
